﻿using System.Text.Json.Serialization;
using Newtonsoft.Json;

namespace Identity.Server;

public class OpenIdConfigModel
{
    [JsonProperty("issuer")]
    [JsonPropertyName("issuer")]
    public string Issuer { get; set; }

    [JsonProperty("jwks_uri")] 
    [JsonPropertyName("jwks_uri")] 
    public string JwksUri { get; set; }

    [JsonProperty("authorization_endpoint")]
    [JsonPropertyName("authorization_endpoint")]
    public string AuthorizationEndpoint { get; set; }

    [JsonProperty("token_endpoint")] 
    [JsonPropertyName("token_endpoint")] 
    public string TokenEndpoint { get; set; }

    [JsonProperty("userinfo_endpoint")]
    [JsonPropertyName("userinfo_endpoint")]
    public string UserinfoEndpoint { get; set; }

    [JsonProperty("end_session_endpoint")]
    [JsonPropertyName("end_session_endpoint")]
    public string EndSessionEndpoint { get; set; }

    [JsonProperty("check_session_iframe")] 
    [JsonPropertyName("check_session_iframe")] 
    public string CheckSessionIframe { get; set; }

    [JsonProperty("revocation_endpoint")] 
    [JsonPropertyName("revocation_endpoint")] 
    public string RevocationEndpoint { get; set; }

    [JsonProperty("introspection_endpoint")]
    [JsonPropertyName("introspection_endpoint")]
    public string IntrospectionEndpoint { get; set; }

    [JsonProperty("device_authorization_endpoint")]
    [JsonPropertyName("device_authorization_endpoint")]
    public string DeviceAuthorizationEndpoint { get; set; }

    [JsonProperty("frontchannel_logout_supported")]
    [JsonPropertyName("frontchannel_logout_supported")]
    public bool FrontchannelLogoutSupported { get; set; }

    [JsonProperty("frontchannel_logout_session_supported")]
    [JsonPropertyName("frontchannel_logout_session_supported")]
    public bool FrontchannelLogoutSessionSupported { get; set; }

    [JsonProperty("backchannel_logout_supported")]
    [JsonPropertyName("backchannel_logout_supported")]
    public bool BackchannelLogoutSupported { get; set; }

    [JsonProperty("backchannel_logout_session_supported")]
    [JsonPropertyName("backchannel_logout_session_supported")]
    public bool BackchannelLogoutSessionSupported { get; set; }

    [JsonProperty("scopes_supported")] 
    [JsonPropertyName("scopes_supported")] 
    public string[] ScopesSupported { get; set; }

    [JsonProperty("claims_supported")] 
    [JsonPropertyName("claims_supported")] 
    public string[] ClaimsSupported { get; set; }

    [JsonProperty("grant_types_supported")]
    [JsonPropertyName("grant_types_supported")]
    public string[] GrantTypesSupported { get; set; }

    [JsonProperty("response_types_supported")]
    [JsonPropertyName("response_types_supported")]
    public string[] ResponseTypesSupported { get; set; }

    [JsonProperty("response_modes_supported")]
    [JsonPropertyName("response_modes_supported")]
    public string[] ResponseModesSupported { get; set; }

    [JsonProperty("token_endpoint_auth_methods_supported")]
    [JsonPropertyName("token_endpoint_auth_methods_supported")]
    public string[] TokenEndpointAuthMethodsSupported { get; set; }

    [JsonProperty("id_token_signing_alg_values_supported")]
    [JsonPropertyName("id_token_signing_alg_values_supported")]
    public string[] IdTokenSigningAlgValuesSupported { get; set; }

    [JsonProperty("subject_types_supported")]
    [JsonPropertyName("subject_types_supported")]
    public string[] SubjectTypesSupported { get; set; }

    [JsonProperty("code_challenge_methods_supported")]
    [JsonPropertyName("code_challenge_methods_supported")]
    public string[] CodeChallengeMethodsSupported { get; set; }

    [JsonProperty("request_parameter_supported")]
    [JsonPropertyName("request_parameter_supported")]
    public bool RequestParameterSupported { get; set; }
}